package com.junjiao.util.java;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Random;

/**
 * 日期操作工具类
 * 
 * @project jiaojun_util
 * @ClassName CalendarUtil.java
 * @author jiaojun
 * @email junjiao.j@gmail.com
 * @version v0.0.1
 * @date 2012-4-28
 */
public class CalendarUtil {

	/**
	 * 日期转换为字符串
	 * 
	 * @param date
	 *            日期
	 * @return 字符串形式的日期
	 */
	public static String date2str(Date date) {
		return date2str(date, null);
	}

	/**
	 * 日期转换为字符串
	 * 
	 * @param date
	 *            日期
	 * @param pattern
	 *            格式：yyyy-MM-dd HH:mm:ss
	 * @return 字符串形式的日期
	 */
	public static String date2str(Date date, String pattern) {
		if (pattern == null)
			pattern = "yyyy-MM-dd HH:mm:ss";
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		return format.format(date);
	}

	/**
	 * 字符串转换为日期
	 * 
	 * @param str
	 *            字符串形式的日期
	 * @return 日期
	 */
	public static Date str2date(String str) throws ParseException {
		return str2date(str, null);
	}

	/**
	 * 字符串转换为日期
	 * 
	 * @param str
	 *            字符串形式的日期
	 * @param pattern
	 *            格式：yyyy-MM-dd HH:mm:ss
	 * @return 日期
	 */
	public static Date str2date(String str, String pattern)
			throws ParseException {
		if (pattern == null)
			pattern = "yyyy-MM-dd HH:mm:ss";
		SimpleDateFormat format = new SimpleDateFormat(pattern);
		return format.parse(str);
	}

	/**
	 * N个分钟后的日期
	 * 
	 * @return
	 */
	public static Date afterNMinute(int n) {
		Calendar cal = Calendar.getInstance();
		cal.add(java.util.Calendar.MINUTE, n);
		return cal.getTime();
	}

	/**
	 * N个小时后的日期
	 * 
	 * @return
	 */
	public static Date afterNHour(int n) {
		Calendar cal = Calendar.getInstance();
		cal.add(java.util.Calendar.HOUR_OF_DAY, n);
		return cal.getTime();
	}

	/**
	 * N个小时前的日期
	 * 
	 * @return
	 */
	public static Date beforeNHour(int n) {
		Calendar cal = Calendar.getInstance();
		cal.add(java.util.Calendar.HOUR_OF_DAY, -n);
		return cal.getTime();
	}

	/**
	 * N天后的日期
	 * 
	 * @return
	 */
	public static Date afterNDay(int n) {
		Calendar cal = Calendar.getInstance();
		cal.add(java.util.Calendar.DAY_OF_MONTH, n);
		return cal.getTime();
	}

	/**
	 * N天前的日期
	 * 
	 * @return
	 */
	public static Date beforeNDay(int n) {
		Calendar cal = Calendar.getInstance();
		cal.add(java.util.Calendar.DAY_OF_MONTH, -n);
		return cal.getTime();
	}

	/**
	 * 两时间相减得到天数
	 * 
	 * @param beginDateStr String类型
	 * @param endDateStr String类型
	 * @return long
	 * @author Administrator
	 */
	public static long getDaySub(String beginDateStr, String endDateStr) {
		long day = 0;
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		Date beginDate;
		Date endDate;
		try {
			beginDate = format.parse(beginDateStr);
			endDate = format.parse(endDateStr);
			day = (endDate.getTime() - beginDate.getTime())
					/ (24 * 60 * 60 * 1000);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return day;
	}
	
	/**
	 * 两时间相减得到天数
	 * 
	 * @param beginDateStr Date类型
	 * @param endDateStr Date类型
	 * @return long
	 * @author Administrator
	 */
	public static long getDaySub(Date beginDateStr, Date endDateStr) {
			return (endDateStr.getTime() - beginDateStr.getTime())
					/ (24 * 60 * 60 * 1000);
	}

	/**
	 * 将当前日期的秒级数据随机
	 * 
	 * @return
	 */
	public static Date getRDatesSecond() {
		Random r = new Random();
		Date date = new Date();
		date.setSeconds(r.nextInt(59 - 1) + 1);
		return date;
	}

	/**
	 * 将当前日期的分级数据随机
	 * 
	 * @return
	 */
	public static Date getRDatesMinute() {
		Random r = new Random();
		Date date = new Date();
		date.setMinutes(r.nextInt(59 - 1) + 1);
		return date;
	}
	
	/**
	 * 当前时间是否在指定的小时区间内
	 * @description:   <br>
	 * @author:jiaojun
	 * @param start
	 * @param end
	 * @return
	 */
	public static boolean isBetweenHour(int start,int end){
		Calendar cal = Calendar.getInstance();
		if(cal.getTime().getHours()>=start && cal.getTime().getHours()<=end)
			return true;
		return false;
	}

	/**
	 * @param args
	 * @throws ParseException
	 */
	public static void main(String[] args) throws ParseException {
		// str2date("Tue Jan 03 21:59:52 CST 2012");
		System.out.println(isBetweenHour(18,22));
	}

}
